import type { AxiosResponse, AxiosRequestHeaders, InternalAxiosRequestConfig } from "axios";
import { ResponseData } from "./type";
import qs from "qs";
import { useUserStore } from "@/stores/module/user";
import { router } from "@/router/index";

/** 默认请求拦截器 */
export const defaultRequestInterceptor = (config: InternalAxiosRequestConfig) => {
  const userStore = useUserStore();
  // 处理请求格式为 application/x-www-form-urlencoded 格式的数据
  const { method, headers } = config;
  if (method === "post" && (headers as AxiosRequestHeaders["Content-Type"]) === "application/x-www-form-urlencoded") {
    config.data = qs.stringify(config.data);
  }
  headers["Authorization"] = userStore.token || "";
  return config;
};

/**
 * 默认响应拦截器
 * 这里根据实际情况自行扩展
 *  */
export const defaultResponseInterceptor = (response: AxiosResponse<any>) => {
  // 请求成功返回 data
  if (response.status >= 200 && response.status <= 300) {
    return response.data;
  } else {
    return response;
  }
};

/** 处理常见的http状态码响应错误 */
export const dealHttpCodeError = (error: any) => {
  let message = error.response?.data?.message ?? "server error";
  if (error.response.status === 401) {
    // 清空缓存 跳登录页
    localStorage.clear();
    router.push({ name: "login" });
  }
  window.$message.error(message);
  return Promise.reject(error);
  // switch (error.response.status) {
  //   case 400:
  //     message = "请求错误(400)";
  //     break;
  //   case 401:
  //     message = "未授权，请重新登录(401)";
  //     // 这里可以做清空storage并跳转到登录页的操作
  //     break;
  //   case 403:
  //     message = "拒绝访问(403)";
  //     break;
  //   case 404:
  //     message = "请求出错(404)";
  //     break;
  //   case 408:
  //     message = "请求超时(408)";
  //     break;
  //   case 500:
  //     message = "服务器错误(500)";
  //     break;
  //   case 501:
  //     message = "服务未实现(501)";
  //     break;
  //   case 502:
  //     message = "网络错误(502)";
  //     break;
  //   case 503:
  //     message = "服务不可用(503)";
  //     break;
  //   case 504:
  //     message = "网络超时(504)";
  //     break;
  //   case 505:
  //     message = "HTTP版本不受支持(505)";
  //     break;
  //   default:
  //     message = `连接出错(${error.response.status})!`;
  // }
};
